const Babl *source_space = babl_conversion_get_source_space (conversion);
float *matrixf;
int i;
- float *lut;
+ float *lut_red;
+ float *lut_green;
+ float *lut_blue;
double matrix[9];
babl_matrix_mul_matrix (
(conversion->conversion.source)->format.space->space.RGBtoXYZ,
matrix);
- matrixf = babl_calloc (sizeof (float), 9 + 256); // we leak this matrix , which is a singleton
+ matrixf = babl_calloc (sizeof (float), 9 + 256 * 3); // we leak this matrix , which is a singleton
babl_matrix_to_float (matrix, matrixf);
conversion->conversion.data = matrixf;
- lut = matrixf + 9;
+ lut_red = matrixf + 9;
+ lut_green = lut_red + 256;
+ lut_blue = lut_green + 256;
for (i = 0; i < 256; i++)
{
- lut[i] = babl_trc_to_linear (source_space->space.trc[0], i/255.0);
- // XXX: should have green and blue luts as well
+ lut_red[i] = babl_trc_to_linear (source_space->space.trc[0], i/255.0);
+ lut_green[i] = babl_trc_to_linear (source_space->space.trc[1], i/255.0);
+ lut_blue[i] = babl_trc_to_linear (source_space->space.trc[2], i/255.0);
}
}
const Babl *destination_space = conversion->conversion.destination->format.space;
float * matrixf = data;
- float * in_trc_lut = matrixf + 9;
+ float * in_trc_lut_red = matrixf + 9;
+ float * in_trc_lut_green = in_trc_lut_red + 256;
+ float * in_trc_lut_blue = in_trc_lut_green + 256;
int i;
uint8_t *rgba_in_u8 = (void*)src_char;
uint8_t *rgba_out_u8 = (void*)dst_char;
for (i = 0; i < samples; i++)
{
- rgb[i*4+0]=in_trc_lut[rgba_in_u8[i*4+0]];
- rgb[i*4+1]=in_trc_lut[rgba_in_u8[i*4+1]];
- rgb[i*4+2]=in_trc_lut[rgba_in_u8[i*4+2]];
+ rgb[i*4+0]=in_trc_lut_red[rgba_in_u8[i*4+0]];
+ rgb[i*4+1]=in_trc_lut_green[rgba_in_u8[i*4+1]];
+ rgb[i*4+2]=in_trc_lut_blue[rgba_in_u8[i*4+2]];
rgba_out_u8[i*4+3] = rgba_in_u8[i*4+3];
}
const Babl *destination_space = conversion->conversion.destination->format.space;
float * matrixf = data;
- float * in_trc_lut = matrixf + 9;
+ float * in_trc_lut_red = matrixf + 9;
+ float * in_trc_lut_green = in_trc_lut_red + 256;
+ float * in_trc_lut_blue = in_trc_lut_green + 256;
int i;
uint8_t *rgb_in_u8 = (void*)src_char;
uint8_t *rgb_out_u8 = (void*)dst_char;
for (i = 0; i < samples; i++)
{
- rgba_out[i*4+0]=in_trc_lut[rgb_in_u8[i*3+0]];
- rgba_out[i*4+1]=in_trc_lut[rgb_in_u8[i*3+1]];
- rgba_out[i*4+2]=in_trc_lut[rgb_in_u8[i*3+2]];
+ rgba_out[i*4+0]=in_trc_lut_red[rgb_in_u8[i*3+0]];
+ rgba_out[i*4+1]=in_trc_lut_green[rgb_in_u8[i*3+1]];
+ rgba_out[i*4+2]=in_trc_lut_blue[rgb_in_u8[i*3+2]];
rgba_out[i*4+3]=rgb_in_u8[i*3+2] * 255.5f;
}
const Babl *destination_space = conversion->conversion.destination->format.space;
float * matrixf = data;
- float * in_trc_lut = matrixf + 9;
+ float * in_trc_lut_red = matrixf + 9;
+ float * in_trc_lut_green = in_trc_lut_red + 256;
+ float * in_trc_lut_blue = in_trc_lut_green + 256;
int i;
uint8_t *rgba_in_u8 = (void*)src_char;
uint8_t *rgba_out_u8 = (void*)dst_char;
for (i = 0; i < samples * 4; i+= 4)
{
- rgba_out[i+0]=in_trc_lut[rgba_in_u8[i+0]];
- rgba_out[i+1]=in_trc_lut[rgba_in_u8[i+1]];
- rgba_out[i+2]=in_trc_lut[rgba_in_u8[i+2]];
+ rgba_out[i+0]=in_trc_lut_red[rgba_in_u8[i+0]];
+ rgba_out[i+1]=in_trc_lut_green[rgba_in_u8[i+1]];
+ rgba_out[i+2]=in_trc_lut_blue[rgba_in_u8[i+2]];
rgba_out_u8[i+3] = rgba_in_u8[i+3];
}
const Babl *destination_space = conversion->conversion.destination->format.space;
float * matrixf = data;
- float * in_trc_lut = matrixf + 9;
+ float * in_trc_lut_red = matrixf + 9;
+ float * in_trc_lut_green = in_trc_lut_red + 256;
+ float * in_trc_lut_blue = in_trc_lut_green + 256;
int i;
uint8_t *rgb_in_u8 = (void*)src_char;
uint8_t *rgb_out_u8 = (void*)dst_char;
for (i = 0; i < samples; i++)
{
- rgba_out[i*4+0]=in_trc_lut[rgb_in_u8[i*3+0]];
- rgba_out[i*4+1]=in_trc_lut[rgb_in_u8[i*3+1]];
- rgba_out[i*4+2]=in_trc_lut[rgb_in_u8[i*3+2]];
+ rgba_out[i*4+0]=in_trc_lut_red[rgb_in_u8[i*3+0]];
+ rgba_out[i*4+1]=in_trc_lut_green[rgb_in_u8[i*3+1]];
+ rgba_out[i*4+2]=in_trc_lut_blue[rgb_in_u8[i*3+2]];
}
babl_matrix_mul_vectorff_buf4_sse2 (matrixf, rgba_out, rgba_out, samples);